package independence.reflection
{
	/**
	 * IReadableMember defines methods for reading a member's values in
	 * a strict and type-safe manner.
	 * 
	 * @author	TK, TK Assembled for Independence Glory.
	 */
	public interface IReadableMember extends IMember
	{	
		/**
		 * Gets the value of this member in the <code>target</code> object.
		 * @param	target	The target object of which to get the value of this member.
		 * @return	The value of this member in the <code>target</code> object.
		 * @throws	independence.reflection.PropertyAccessError	If accessing a write-only member, a PropertyAccessError is thrown.
		 */
		function getValue(target:Object):Object;
		/**
		 * Get the Array value of this member in the <code>target</code> object.
		 * @param	target	The target object of which to get the value of this member.
		 * @return	The Array value of this member in the <code>target</code> object.
		 * @throws	PropertyAccessError	If accessing a write-only member, a PropertyAccessError is thrown.
		 */
		function getArray(target:Object):Array;
		/**
		 * Gets the boolean value of this member in the <code>target</code> object.
		 * @param	target	The target object of which to get the value of this member.
		 * @return	The boolean value of this member in the <code>target</code> object.
		 * @throws	PropertyAccessError	If accessing a write-only member, a PropertyAccessError is thrown.
		 */
		function getBoolean(target:Object):Boolean;
		/**
		 * Gets the integer value (int) of this member in the <code>target</code> object.
		 * @param	target	The target object of which to get the value of this member.
		 * @return	The integer value of this member in the <code>target</code> object.
		 * @throws	PropertyAccessError	If accessing a write-only member, a PropertyAccessError is thrown.
		 */
		function getInteger(target:Object):int;
		/**
		 * Gets the number value of this member in the <code>target</code> object. 
		 * @param	target	The target object of which to get the value of this member.
		 * @return	The number value of this member in the <code>target</code> object.
		 * @throws	PropertyAccessError	If accessing a write-only member, a PropertyAccessError is thrown.
		 */
		function getNumber(target:Object):Number;
		/**
		 * Gets the string value of this member in the <code>target</code> object.
		 * @param	target	The target object of which to get the value of this member.
		 * @return	The string value of this member in the <code>target</code> object.
		 * @throws	PropertyAccessError	If accessing a write-only member, a PropertyAccessError is thrown.
		 */
		function getString(target:Object):String;
		/**
		 * Gets the unsigned integer (uint) value of this member in the <code>target</code> object.
		 * @param	target	The target object of which to get the value of this member.
		 * @return	The unsigned integer value of this member in the <code>target</code> object.
		 * @throws	PropertyAccessError	If accessing a write-only member, a PropertyAccessError is thrown.
		 */
		function getUnsignedInt(target:Object):uint;
		/**
		 * Gets the XML value of this member in the <code>target</code> object.
		 * @param	target	The target object of which to get the value of this member.
		 * @return	The XML value of this member in the <code>target</code> object.
		 * @throws	PropertyAccessError	If accessing a write-only member, a PropertyAccessError is thrown.
		 */
		function getXML(target:Object):XML;
	}
}